/**
 *******************************************************************************
 *                       Continental Confidential
 *                  Copyright (c) Continental AG. 2017
 *
 *      This software is furnished under license and may be used or
 *      copied only in accordance with the terms of such license.
 *******************************************************************************
 * @file    bdschanneloneview.h
 * @brief   BDS通道一插件主视图类头文件
 * @details 定义了BDSChannelOneView类，该类是BDS通道一插件的用户界面，
 *          提供路径显示、图像展示和数据处理功能
 *******************************************************************************
 * TODO: Qt5.15.2升级 - 检查头文件包含是否需要调整以适应新版本Qt
 * TODO: C++17升级 - 考虑使用#include <memory>以支持智能指针
 */
#ifndef BDSCHANNELONEVIEW_H
#define BDSCHANNELONEVIEW_H

#include "graphicsview.h"
#include <QDialog>

namespace Ui {
class BDSChannelOneView;
}

namespace BDSChannelOne {
/**
 * @enum ALGORITHM_TYPE
 * @brief 算法类型枚举
 * @details 定义BDS通道一插件支持的所有数据处理算法类型
 */
/**
 * @enum ALGORITHM_TYPE
 * @brief 算法类型枚举
 * @details 定义BDS通道一插件支持的所有数据处理算法类型
 * TODO: Qt5.15.2升级 - 考虑使用Q_ENUM_NS宏使枚举在元对象系统中可用
 */
enum class  ALGORITHM_TYPE : uint{
    ALGORITHM_1,   ///< 算法1：基础数据滤波算法，用于去除原始数据中的噪声
    ALGORITHM_2,   ///< 算法2：特征点提取算法，从数据中识别关键特征点
    ALGORITHM_3,   ///< 算法3：路径规划算法，根据输入数据生成最优路径
    ALGORITHM_4,   ///< 算法4：数据融合算法，整合多源数据以提高精度
    ALGORITHM_5,   ///< 算法5：异常检测算法，识别数据中的异常值或模式
    ALGORITHM_6,   ///< 算法6：速度计算算法，基于位置数据计算移动速度
    ALGORITHM_7,   ///< 算法7：距离估算算法，计算两点间的距离
    ALGORITHM_8,   ///< 算法8：角度校正算法，校正传感器数据的角度偏差
    ALGORITHM_9,   ///< 算法9：姿态解算算法，计算物体的空间姿态
    ALGORITHM_10,  ///< 算法10：轨迹预测算法，基于历史数据预测未来轨迹
    ALGORITHM_11   ///< 算法11：结果优化算法，优化处理结果以提高准确性
};

/**
 * @class BDSChannelOneView
 * @brief BDS通道一插件主视图类
 * @details 继承自QDialog，提供插件的用户交互界面，支持路径显示、图像展示和数据处理功能。
 *          该类负责与用户交互，接收用户输入并显示处理结果
 * TODO: Qt5.15.2升级 - 考虑使用QDialog的新特性，如QDialog::showEvent和QDialog::hideEvent
 * TODO: C++17升级 - 考虑使用final关键字标记此类，防止不必要的继承
 */
class BDSChannelOneView : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父窗口部件指针，默认为nullptr
     * @details 初始化插件视图界面，创建图形视图组件并设置UI布局
     *          包括初始化UI表单、创建GraphicsView对象以及设置信号槽连接
     * TODO: Qt5.15.2升级 - 考虑使用parent参数的默认值为nullptr而非0
     * TODO: Qt5.15.2升级 - 检查setupUi函数是否需要调整以适应新版本Qt
     * TODO: C++17升级 - 考虑使用constexpr修饰构造函数
     * TODO: C++17升级 - 考虑使用类成员初始化器初始化成员变量
     */
    explicit BDSChannelOneView(QWidget *parent = nullptr);
    
    /**
     * @brief 析构函数
     * @details 释放UI资源和图形视图对象，清理对话框资源
     * TODO: Qt5.15.2升级 - 检查QDialog析构函数行为是否有变更
     * TODO: C++17升级 - 考虑添加noexcept规范
     */
    ~BDSChannelOneView();
    
    /**
     * @brief 设置路径点集
     * @param points 包含路径点坐标的QVector<QPointF>引用
     * @details 将路径点传递给图形视图组件，用于在界面上绘制轨迹
     *          该方法会更新图形视图中的路径显示
     * TODO: C++17升级 - 考虑使用std::vector替代QVector以提高兼容性
     * TODO: C++17升级 - 考虑添加[[nodiscard]]属性
     */
    void setPoints(const QVector<QPointF> &points);
    
    /**
     * @brief 设置显示图像
     * @param image 要显示的QPixmap图像对象
     * @details 在图形视图中显示指定图像，用于背景或参考图展示
     *          该方法会更新图形视图中的背景图像
     * TODO: Qt5.15.2升级 - 检查QPixmap在新版本中的API变化
     * TODO: C++17升级 - 考虑添加[[nodiscard]]属性
     */
    void setPixmap(const QPixmap &image);

Q_SIGNALS:
    /**
     * @brief 数据处理请求信号
     * @param[in] type 算法类型（ALGORITHM_TYPE），指定要使用的处理算法
     * @param[in] param 算法参数（浮点型），传递给算法的配置参数
     * @details 当用户点击处理按钮时发射，通知外部进行数据处理
     * TODO: Qt5.15.2升级 - 检查信号声明语法是否有更新
     * TODO: C++17升级 - 考虑使用constexpr修饰参数类型
     */
    void processData(ALGORITHM_TYPE, float);

private slots:
    /**
     * @brief 处理按钮点击槽函数
     * @details 响应处理按钮点击事件，获取用户选择的算法和参数，发射processData信号
     *          该方法会从UI控件中读取用户输入的算法类型和参数值
     * TODO: Qt5.15.2升级 - 检查槽函数声明语法是否有更新
     * TODO: C++17升级 - 考虑添加noexcept规范
     */
    void on_processBtn_clicked();

private:
    Ui::BDSChannelOneView *ui;          ///< UI表单对象指针，用于访问UI控件
                                        ///< TODO: C++17升级 - 考虑使用std::unique_ptr替代原始指针
    GraphicsView *m_graphicsView;       ///< 自定义图形视图组件指针，用于显示路径和图像
                                        ///< TODO: C++17升级 - 考虑使用std::unique_ptr替代原始指针
}; // TODO: Qt5.15.2升级 - 考虑使用QDialog::setWindowFlag设置窗口属性以支持新样式
// TODO: Qt5.15.2升级 - 考虑使用Q_DECLARE_METATYPE宏声明ALGORITHM_TYPE类型
// TODO: C++17升级 - 考虑使用using关键字定义类型别名以简化代码
}
#endif // BDSCHANNELONEVIEW_H
